<h2>Why is this an issue?</h2>
<p>Most developers expect property access to be as efficient as field access. However, if a property returns a copy of an array or collection, it will
be much slower than a simple field access, contrary to the caller’s likely expectations. Therefore, such properties should be refactored into methods
so that callers are not surprised by the unexpectedly poor performance.</p>
<p>This rule tracks calls to the following methods inside properties:</p>
<ul>
  <li> <a href="https://learn.microsoft.com/en-us/dotnet/api/system.linq.enumerable.tolist">Enumerable.ToList</a> </li>
  <li> <a href="https://learn.microsoft.com/en-us/dotnet/api/system.linq.enumerable.toarray">Enumerable.ToArray</a> </li>
  <li> <a href="https://learn.microsoft.com/en-us/dotnet/api/system.array.clone">Array.Clone</a> </li>
</ul>
<h2>How to fix it</h2>
<h3>Code examples</h3>
<h4>Noncompliant code example</h4>
<pre data-diff-id="1" data-diff-type="noncompliant">
Private fFoo As New List(Of String) From {"a", "b", "c"}
Private fBar As String() = {"a", "b", "c"}

Public ReadOnly Property Foo() As IEnumerable(Of String) ' Noncompliant: collection fFoo is copied
    Get
        Return fFoo.ToList()
    End Get
End Property

Public ReadOnly Property Bar() As IEnumerable(Of String) ' Noncompliant: array fBar is copied
    Get
        Return DirectCast(fBar.Clone(), String())
    End Get
End Property
</pre>
<h4>Compliant solution</h4>
<pre data-diff-id="1" data-diff-type="compliant">
Private fFoo As New List(Of String) From {"a", "b", "c"}
Private fBar As String() = {"a", "b", "c"}

Public Function GetFoo() As IEnumerable(Of String)
    Return fFoo.ToList()
End Function

Public Function GetBar() As IEnumerable(Of String)
    Return DirectCast(fBar.Clone(), String())
End Function
</pre>
<h2>Resources</h2>
<h3>Documentation</h3>
<ul>
  <li> <a href="https://learn.microsoft.com/en-us/dotnet/visual-basic/language-reference/properties">Properties (Visual Basic)</a> </li>
  <li> <a
  href="https://learn.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/objects-and-classes/#fields-and-properties">Fields
  and properties</a> </li>
  <li> <a href="https://learn.microsoft.com/en-us/dotnet/visual-basic/programming-guide/concepts/collections">Collections (Visual Basic)</a> </li>
</ul>

